package cainiao;

import javax.swing.*;
import java.time.LocalDate;

/**
 * 菜鸟驿站系统界面
 */
public class CainiaoUI {
    /**
     * 员工数组
     */
    private SuperArray sysEmp = new SuperArray();
    /**
     * 包裹数组
     */
    private SuperArray sysLab = new SuperArray();
    /**
     * 登录成功后保存的员工数组的下标值
     */
    public int empIndex;

    public static void main(String[] args) {
        CainiaoUI ui = new CainiaoUI();
        ui.process();
    }

    public CainiaoUI() {
        sysEmp.add(new Employee("张三","管理员"));
        sysEmp.add(new Employee("李四","职工"));
    }

    public void process() {

        while (true) {
            String choose = JOptionPane.showInputDialog(null, "欢迎使用菜鸟驿站管理系统\n\n\n\n"
                    + "请输入选项\n"
                    + "1、登录系统\n"
                    + "2、退出系统");
            if ("1".equals(choose)) {
                int rs = 0;
                for (int i = 0; i < 3; i++) {
                    rs = login();
                    if (rs >= 0) {
                        break;
                    } else {
                        if (i == 2) {
                            JOptionPane.showMessageDialog(null, "非法用户");
                            System.exit(0);
                        } else {
                            JOptionPane.showMessageDialog(null, "账号或密码错误，请重新输入，剩下" + (2 - i) + "次");
                        }

                    }
                }
                if (rs == 0) {
                    // 进入员工系统菜单
                    empMenu();
                } else {
                    // 进入入库出库菜单;
                    labMenu();
                }
            } else {
                JOptionPane.showMessageDialog(null, "谢谢使用，再见！");
                System.exit(0);
            }
        }
    }

    /**
     * 登录验证的方法
     *
     * @return -1 代表登录失败 ；0 - 代表登录员工管理系统； 1 - 代表登录入库出库系统
     */
    public int login() {
        String empName = JOptionPane.showInputDialog(null, "请输入员工姓名：");
        String empPwd = JOptionPane.showInputDialog(null, "请输入员工密码：");
        for (int i = 0; i < sysEmp.size(); i++) {
            Employee emp = (Employee) sysEmp.get(i);
            if (emp.getName().equals(empName) && emp.getPwd().equals(empPwd)) {
                empIndex = i;
                if (emp.getLevel().equals("管理员")) {
                    return 0;
                } else {
                    return 1;
                }
            }
        }
        return -1;
    }

    /**
     * 员工管理的菜单
     */
    public void empMenu() {
        while (true) {
            String choose = JOptionPane.showInputDialog(null, "欢迎使用员工管理\n"
                    + "1、查看所有员工\n"
                    + "2、添加员工\n"
                    + "3、删除员工\n"
                    + "4、修改密码\n"
                    + "5、安全退出");
            if ("1".equals(choose)) {
                showEmp();
            } else if ("2".equals(choose)) {
                addEmp();
            } else if ("3".equals(choose)) {
                delEmp();
            } else if ("4".equals(choose)) {

            } else if ("5".equals(choose)) {
                JOptionPane.showMessageDialog(null, "系统退出");
                break;
            } else {
                JOptionPane.showMessageDialog(null, "输入有误");

            }
        }
    }

    /**
     * 入库出库菜单
     */
    public void labMenu() {
        while (true) {
            String choose = JOptionPane.showInputDialog(null, "欢迎使用员工管理\n"
                    + "1、入库\n"
                    + "2、客户取货\n"
                    + "3、查看未取货订单\n"
                    + "4、按取货码查询订单\n"
                    + "5、按姓名查询订单\n"
                    + "6、修改密码\n"
                    + "7、安全退出");
            if ("1".equals(choose)) {
                inLab();

            } else if ("2".equals(choose)) {
                outLab();

            } else if ("3".equals(choose)) {

            } else if ("4".equals(choose)) {

            } else if ("5".equals(choose)) {

            } else if ("6".equals(choose)) {

            } else if ("7".equals(choose)) {

            } else {

            }
        }
    }

    /**
     * 显示所有员工
     */
    public void showEmp() {
        String str = String.format("%-8s%-8s\n\n", "姓名", "等级");
        for (int i = 0; i < sysEmp.size(); i++) {

            Employee emp = (Employee) sysEmp.get(i);
            str += String.format("%-8s%-8s\n", emp.getName(), emp.getLevel());
        }
        JOptionPane.showMessageDialog(null, str);
    }

    /**
     * 添加员工
     */
    public void addEmp() {
        String empName = JOptionPane.showInputDialog(null, "请输入员工的姓名");
        String empLevel = JOptionPane.showInputDialog(null, "请输入员工的等级");
        sysEmp.add(new Employee(empName, empLevel));
        JOptionPane.showMessageDialog(null, "添加成功");
    }

    /**
     * 删除员工
     */
    public void delEmp() {
        String empName = JOptionPane.showInputDialog(null, "请输入删除的员工姓名");
        for (int i = 0; i < sysEmp.size(); i++) {
            Employee emp = (Employee) sysEmp.get(i);
            if (emp.getName().equals(empName)) {
                sysEmp.remove(i);
                JOptionPane.showMessageDialog(null, "删除成功");
                return;
            }
        }
        JOptionPane.showMessageDialog(null, "查无此人");
    }

    /**
     * 入库
     */
    public void inLab() {
//        String getNo = JOptionPane.showInputDialog(null, "请输入取货码");
//        String getName = JOptionPane.showInputDialog(null, "请输入收货人");
//        String getPhone = JOptionPane.showInputDialog(null, "请输入收货人电话");
//        sysLab = ArrayUtil.add(sysLab, new String[]{getNo, getName, getPhone, LocalDate.now().toString(), "未取货", "无", "无"});
//        JOptionPane.showMessageDialog(null, "入库成功");
    }

    /**
     * 取货
     */
    public void outLab() {
        String getNo = JOptionPane.showInputDialog(null, "请输入取货码");
        boolean flag = false;
        int index = 0;
        Parcel parcel = null;
        for (int i = 0; i < sysLab.size(); i++) {
            parcel = (Parcel) sysLab.get(i);
            if (parcel.getCode().equals(getNo)) {
                flag = true;
                break;
            }
        }
        if (!flag) {
            JOptionPane.showMessageDialog(null, "该取货码不存在");
            return;
        }
        String str = String.format("%-11s%-8s%-15s%-14s%-14s%-8s%-8s\n\n", "取货码", "收货人", "收货人电话", "入库时间", "取货时间", "取货人", "经办人");
        str += String.format("%-14s%-8s%-15s%-14s%-14s%-8s%-8s\n\n"
                , parcel.getCode()
                , parcel.getConsignee()
                , parcel.getConsigneePhone()
                , parcel.getGetTime()
                , parcel.getInTime()
                , parcel.getPickupPerson()
                , parcel.getTransactor());
        // 判断货物是否被取走
        if ("未取货".equals(parcel.getGetTime())) {
            // 未取货状态
            int choose = JOptionPane.showConfirmDialog(null, str + "确认取走吗？");
            if (choose == 0) {
                String getName = JOptionPane.showInputDialog(null, "取货人签字");
                // 设置取货时间
                parcel.setGetTime(LocalDate.now().toString());
                // 设置取货人
                parcel.setPickupPerson(getName);
                // 将当前登录用户的姓名作为经办人
                Employee emp = ((Employee)sysEmp.get(empIndex));
                parcel.setTransactor(emp.getName());
            }

        } else {
            // 已取货状态
            JOptionPane.showMessageDialog(null, str + "该货物已被取走");
        }



    }
}
